package org.jeeasy.common.core.enums;

import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.annotation.JsonValue;

import java.io.Serializable;
import java.util.Objects;

/**
 * @author AlpsDDJ
 * @date 2020/11/23 10:58
 */
public interface IDictEnum<T extends Serializable> {

    String SUCCESS_COLOR = "success";
    String WARNING_COLOR = "warning";
    String DEFAULT_COLOR = "default";

    /**
     * 获取字典项文本
     *
     * @return
     */
    @JsonValue
    T getValue();

    /**
     * 获取字典项文本
     *
     * @return
     */
    String getText();

    default String getColor() {
        return StrUtil.EMPTY;
    }

    default boolean is(T value) {
        return Objects.equals(getValue(), value);
    }

    ///**
    // * 根据子枚举和子枚举对应的入参值找到对应的枚举类型
    // *
    // * @param value 子枚举中对应的值
    // * @param clazz 子枚举类型
    // * @param <B>   {@link IDictEnum} 的子类类型
    // * @param <V>   子枚举值的类型
    // * @param <E>   子枚举的类型
    // * @return 返回 {@link IDictEnum} 对应的子类实例
    // */
    //static <B extends IDictEnum<V, E>, V extends Serializable, E extends Enum<E>> B fromValue(V value, Class<B> clazz) {
    //    return Arrays.stream(clazz.getEnumConstants())
    //            .filter(e -> Objects.equals(e.getValue(), value))
    //            .findFirst().orElse(null);
    //}

}
